home *** CD-ROM | disk | FTP | other *** search
Wrap
(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=cross-syl Title=SDG (ES) Description=Movie importation script for SDG Site=http://www.sdg-es.com Language=ES Version=1.0 Requires=3.5.0 Comments= License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.| GetInfo=1 [Options] ***************************************************) program SDG; const SearchBaseURL = 'http://www.sdg-es.com/web/index.php?module=dp_Elinks&func=buscar&buscar='; SearchPostFix = '&stype=tit'; BaseURL1 = 'http://www.sdg-es.com/web/'; BaseURL2 = 'http://www.sdg-es.com'; var MovieName: string; MovieURL: string; //------------------------------------------------------------------------------------ function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin Result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then begin Result := i; Break; end; end; //------------------------------------------------------------------------------------ function TextBetween(var S: string; StartTag: string; EndTag: string): string; var InitialPos: Integer; longEnd: Integer; begin InitialPos := Pos(StartTag, S); Delete(S, 1, InitialPos + Length(StartTag) - 1); if( Length(EndTag)>0) then begin InitialPos := Pos(EndTag, S); result := copy(S, 1, InitialPos - 1); Delete(S, 1, InitialPos + 1); end else begin result := copy(S, 1, Length(S)); end end; //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ function RemoveDot(S: string): string; var long, posDot: Integer; begin long := Length(S); posDot := Pos('.',S); if(posDot=long) then begin result := copy(S, 1, long-1); end else begin result := copy(S, 1, long); end end; //------------------------------------------------------------------------------------ procedure AnalyzeMultiplePages(AddressIni: string); var Page, PageTemp: TStringList; LineNr: Integer; Line, LineAux: string; MovieTitle, MovieAddress: string; Elementos: Integer; Item: string; morePages: Boolean; AddressTemp: string; numPage: string; begin Page := TStringList.Create; Page.Text := GetPage(AddressIni); if Pos('<title>SDG-ES.com', Page.Text) = 0 then begin ShowMessage('No se ha podido establecer la conexion.'); end else begin Elementos := 0; PickTreeClear; LineNr := FindLine('startnum=', Page, 0); if (LineNr <> -1) then // Multiples paginas begin Line := Page.GetString(LineNr); LineAux := TextBetween (Line, '"pn-normal"', ' '); morePages := true; repeat if(pos('href="',LineAux)>0) then begin AddressTemp := TextBetween (LineAux, 'href="', '">'); HTMLDecode(AddressTemp); if (Pos('=1',AddressTemp) = Length(AddressTemp)-1) then begin PageTemp := Page; end else begin PageTemp := TStringList.Create; end Elementos := AnalyzePage(BaseURL2+AddressTemp, Elementos, PageTemp); end else begin morePages := false; end until not(morePages); end else // Una sola pagina begin Elementos := AnalyzePage(AddressIni, Elementos, Page); end end if(Elementos=0) then begin ShowMessage('No se han encontrado resultados para "' + MovieName + '"'); end else begin if PickTreeExec(AddressIni) then AnalyzeMoviePage(AddressIni); end; Page.Free; end; //------------------------------------------------------------------------------------ function AnalyzePage(AddressPage: string; num_elem: Integer; PageAux: TStringList): Integer; var Page: TStringList; LineNr: Integer; Line: string; MovieTitle, MovieAddress: string; Elementos: Integer; begin if(pageAux.Count=0) then begin Page := TStringList.Create; Page.Text := GetPage(AddressPage); end else begin Page := PageAux; end if Pos('<title>SDG-ES.com', Page.Text) = 0 then begin ShowMessage('No se ha podido establecer la conexion.'); end else begin Elementos := num_elem; LineNr := FindLine('<!--( Elementos )-->', Page, 0); LineNr := LineNr + 1; Line := Page.GetString(LineNr); repeat if(pos('- <a href="',Line)>0) then begin MovieAddress := TextBetween (Line, '<a href="', '">'); MovieTitle := TextBetween (Line, '', '</a>'); HTMLDecode(Movietitle); PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress); Elementos := Elementos +1; end LineNr := LineNr + 1; Line := Page.GetString(LineNr); until Pos('<!--( Paginacion y hooks )-->', Line) > 0; end; result := Elementos; end; //------------------------------------------------------------------------------------ procedure AnalyzeMoviePage(Address: string); var Page: TStringList; LineNr, LineNrAux, aux, numCds, found, multiplier: Integer; Size, SizeLimit: Double; Line: string; Item: string; Comments: string; Actors: string; Description: string; isDual, isSubtitExt, isSonidoExt: Boolean; Idiomas: string; Subtit: String; strAux: string; delimiter: string; SonidoExt: string; TitOriginal: string; begin Comments := ''; Actors := ''; Description := ''; // URL SetField(fieldURL, Address); Page := TStringList.Create; Page.Text := GetPage(Address); // Titulo traducido LineNr := FindLine('<!--( Elemento )-->', Page, 0); LineNr := LineNr + 10; Line := Page.GetString(LineNr); if Pos('<img src', Line) > 0 then begin Item := TextBetween (Line, '<b>', ' <img'); end else Item := TextBetween (Line, '<b>', '</b>'); begin end HTMLDecode(Item); TitOriginal := AnsiMixedCase(AnsiLowerCase(Trim (Item)),' '); SetField(fieldTranslatedTitle, TitOriginal); // Picture LineNr := LineNr + 9; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<img src="', '" align'); GetPicture (BaseURL2 + Item); // Descripcion LineNrAux := FindLine('Descripci≤n:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '<br>', ''); HTMLDecode(Item); SetField(fieldDescription, Trim (Item)); end // Titulo original LineNrAux := FindLine('Tφtulo original:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldOriginalTitle, RemoveDot(Trim (Item))); end else begin SetField(fieldOriginalTitle, TitOriginal); end // Direccion LineNrAux := FindLine('Direcci≤n:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldDirector, RemoveDot(Trim (Item))); end // Interpretacion LineNrAux := FindLine('Interpretaci≤n:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldActors, RemoveDot(Trim (Item))); end else begin LineNrAux := FindLine('IntΘrpretes:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldActors, RemoveDot(Trim (Item))); end end // Genero LineNrAux := FindLine('GΘnero:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldCategory, RemoveDot(Trim (Item))); end // Duracion LineNrAux := FindLine('Duraci≤n:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ' min'); HTMLDecode(Item); SetField(fieldLength, Trim (Item)); end // Pais LineNrAux := FindLine('Paφs:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldCountry, RemoveDot(Trim (Item))); end // Year LineNrAux := FindLine('A±o:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', '.'); HTMLDecode(Item); SetField(fieldYear, RemoveDot(Trim (Item))); end // Video format LineNrAux := FindLine('Video Codec', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldVideoFormat, Trim (Item)); end // Resolucion LineNrAux := FindLine('Resoluci≤n:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldResolution, Trim (Item)); end // Bitrate video LineNrAux := FindLine('Bitrate', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', 'Kbps'); HTMLDecode(Item); SetField(fieldVideoBitrate, Trim (Item)); end // Audio isDual := False; LineNrAux := FindLine('Audio Codec', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); if (pos('Audio Codec:',Line)>0) then // Un solo codec begin Item := TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldAudioFormat, Trim (Item)); // Bitrate Audio LineNrAux := FindLine('Bitrate:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := TextBetween (Line, '</b>', 'Kbps'); HTMLDecode(Item); SetField(fieldAudioBitrate, Trim (Item)); end end else begin // Varios codecs isDual := True; Idiomas := ''; Item := ''; Item := Item + Trim(TextBetween (Line, 'Codec ', ':')); Idiomas := Idiomas + Item; Item := Item + ' ' + Trim(TextBetween (Line, '</b>', '')); // Bitrate Audio LineNrAux := FindLine('Bitrate:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := Item + '(' + Trim(TextBetween (Line, '</b>', '')) + ')'; end repeat LineNrAux := FindLine('Audio Codec', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); strAux := Trim(TextBetween (Line, 'Codec ', ':')); Item := Item + '. ' + strAux; Idiomas := Idiomas + ', ' + strAux; Item := Item + ' ' + Trim(TextBetween (Line, '</b>', '')); // Bitrate Audio LineNrAux := FindLine('Bitrate:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := Item + '(' + Trim(TextBetween (Line, '</b>', '')) + ')'; end end until (LineNrAux = -1); HTMLDecode(Item); SetField(fieldAudioFormat, Trim (Item)); end end // Subtitulos forzados LineNrAux := FindLine('tulos forzados:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := ''; Item := Item + AnsiUpFirstLetter(TextBetween (Line, 'tulos ', ':')); Item := Item + ' ' + TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldSubtitles, Trim (Item)); end else begin LineNrAux := FindLine('tulos espa±ol:', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); Item := ''; Item := Item + AnsiUpFirstLetter(TextBetween (Line, 'tulos ', ':')); Item := Item + ' ' + TextBetween (Line, '</b>', ''); HTMLDecode(Item); SetField(fieldSubtitles, Trim (Item)); end end // Idioma LineNrAux := FindLine('Idioma', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux; Line := Page.GetString(LineNr); if (isDual) then begin Item := Idiomas; end else begin Item := Trim(TextBetween (Line, '/> - ', '</td>')); end HTMLDecode(Item); SetField(fieldLanguages, Trim (Item)); end // Tamano archivo y numero cds numCds := 0; found := 0; Size := 0; Item := ''; isSubtitExt := False; isSonidoExt := False; repeat LineNrAux := FindLine('ed2k.gif', Page, LineNr); if (LineNrAux <> -1) then begin LineNr := LineNrAux + 1; Line := Page.GetString(LineNr); if ((pos('Subtitulos',Line)=0) and (pos('Subtφtulos',Line)=0) and (pos('Carßtula',Line)=0) and (pos('Caratula',Line)=0) and (pos('Sonido',Line)=0))then begin LineNr := LineNr + 1; Line := Page.GetString(LineNr); delimiter := ''; if (pos('G', Line)>0) then begin delimiter := 'GB'; end else if (pos('M', Line)>0) then begin delimiter := 'MB'; end else if (pos('K', Line)>0) then begin delimiter := 'KB'; end else delimiter := ''; Item := TextBetween (Line, '">', delimiter); Size := Size + StrToFloat(Trim(Item)); numCds := numCds + 1; end else if ((pos('Subtitulos',Line)>0) or (pos('Subtφtulos',Line)>0)) then begin isSubtitExt := True; Subtit := TextBetween (Line, 'title="','">'); end else if ((pos('Sonido',Line)>0)) then begin isSonidoExt := True; SonidoExt := TextBetween (Line, 'title="','">'); end end until (LineNrAux = -1); HTMLDecode(Item); SizeLimit := 1024; if ((delimiter='MB') and (Size > SizeLimit)) then begin Size := Size / SizeLimit; delimiter := 'GB'; strAux := FloatToSTr(Size); Delete(strAux,5,length(strAux)-4); end else strAux := FloatToSTr(Size); SetField(fieldSize, StrAux + ' ' + delimiter); SetField(fieldDisks, IntToStr(numCds)); // Subtitulos externos if (isSubtitExt) then begin Subtit := 'Fichero aparte (' + Subtit + ')' ; HTMLDecode(Item); SetField(fieldSubtitles, Trim (Subtit)); end // Sonido externo if (isSonidoExt) then begin SonidoExt := GetField(fieldAudioFormat) + '. Fichero aparte (' + SonidoExt + ')' ; HTMLDecode(Item); SetField(fieldAudioFormat, Trim (SonidoExt)); end end; //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ begin if CheckVersion(3,5,0) then begin MovieName := GetField(fieldOriginalTitle); if MovieName = '' then MovieName := GetField(fieldTranslatedTitle); if MovieName <> '' then begin AnalyzeMultiplePages(SearchBaseURL + UrlEncode(MovieName)); end else if Input('Importar de SDG', 'Introduzca el titulo de la pelicula:', MovieName) then begin if (Trim(MovieName)<> '') then begin AnalyzeMultiplePages(SearchBaseURL + UrlEncode(MovieName)); end end end else ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)'); end.